﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using BusinessLogicLayer;
using DataAccessComponents;

namespace inzDesktop
{
    /// <summary>
    /// Interaction logic for windowSzczegolyTermin.xaml
    /// </summary>
    public partial class windowSzczegolyTermin : Window
    {
        public windowSzczegolyTermin()
        {
            InitializeComponent();
        }

        public void inicjalizujZawartosc(int idtermin)
        {
            TerminBL terminBL = new TerminBL();
            Termin termin = terminBL.pobierz(idtermin);
            termin.Czy_zmiana = false;
            this.DataContext = termin;
            this.Title = "Szczegóły terminu " + termin.Data_rozpoczecia.ToShortDateString();
            //Uzupelanianie combobox
            MiastoBL miastoBL = new MiastoBL();
            cbMiastoCelu.ItemsSource = miastoBL.pobierzListe();
            cbMiastoWylotu.ItemsSource = miastoBL.pobierzListe();
            OfertaBL ofertaBL = new OfertaBL();
            cbNazwaOferta.ItemsSource = ofertaBL.pobierzListe();

        }

        private void dataGridRezerwacje_Loaded(object sender, RoutedEventArgs e)
        {
            akutalizujDataGridRezerwacje();
        }

        private void akutalizujDataGridRezerwacje()
        {
            RezerwacjaBL rezerwacjaBL = new RezerwacjaBL();
            
            Termin termin = (Termin)this.DataContext;          

            // Dodawanie widoku do kontrolki od filtrowania
            filtrRezerwacja.Widok = CollectionViewSource.GetDefaultView(rezerwacjaBL.pobierzListe(termin.Id_termin));
            dataGridRezerwacje.ItemsSource = filtrRezerwacja.Widok;

            // Przekazywanie nazw kolumn
            filtrRezerwacja.cbNazwaColumny.ItemsSource = new String[] { "ID", "Imie", "Nazwisko", "Telefon" };
            // Dodawanie filtru            
            filtrRezerwacja.Filtr = new Predicate<object>(filtrRezerwacja.filtrListaRezerwacji);
        }

        private void btnAnuluj_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void btnOk_Click(object sender, RoutedEventArgs e)
        {
            if (((Termin)this.DataContext).Czy_zmiana == true)
            {
                System.Windows.MessageBoxResult wynik = System.Windows.MessageBox.Show("Czy zapisać zmiany?", "Uwaga!", MessageBoxButton.YesNoCancel, MessageBoxImage.Question);
                if (wynik == MessageBoxResult.Yes)
                {
                    zapiszZmianyTermin();
                    this.Close();
                }
                else if (wynik == MessageBoxResult.No)
                {
                    this.Close();
                }
            }
            else
                this.Close();
        }

        private void zapiszZmianyTermin()
        {
            TerminBL terminBL = new TerminBL();
            Termin termin = this.DataContext as Termin;
            terminBL.aktualizuj(this.DataContext as Termin);
        }

        private void btnZastosuj_Click(object sender, RoutedEventArgs e)
        {
            zapiszZmianyTermin();
            System.Windows.MessageBox.Show("Zmiany zapisane pomyślnie", "Sukces", MessageBoxButton.OK, MessageBoxImage.Information);
        }

        private void dpTerminOD_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
        {
            Termin termin = (Termin)this.DataContext;
            // Przypisanie wybranej daty
            termin.Data_rozpoczecia = (DateTime)((DatePicker)sender).SelectedDate;
        }

        private void DatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
        {
            Termin termin = (Termin)this.DataContext;
            // Przypisanie wybranej daty
            termin.Data_zakonczenia = (DateTime)((DatePicker)sender).SelectedDate;
            tbIloscDni.Text = (termin.Data_zakonczenia.DayOfYear - termin.Data_rozpoczecia.DayOfYear).ToString();
        }

        private void tbIloscDni_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (!string.IsNullOrEmpty(tbIloscDni.Text))
            {
                dpTerminDO.SelectedDate = ((DateTime)dpTerminOD.SelectedDate).AddDays(Convert.ToDouble(tbIloscDni.Text));
            }

            int wynik = 0;
            if (Int32.TryParse(tbIloscDni.Text,out wynik) == true)
            {
                Termin termin = this.DataContext as Termin;
                termin.Ilosc_dni = wynik;
            }
        }
    }
}
